/* Universidad del Valle de Guatemala
 * Mariana Castillo, 12319
 * Julio Maldonado, 12377
 * Seccion 30, Algoritmos y Estructura de Datos
 * Archivo Texto
 */
package hoja9;

import java.io.*;
import java.util.*;

public class ArchivoTexto {
    
    File archivo;
    FileReader fr;
    BufferedReader br;
    FileWriter fw;
    PrintWriter pw;
    Grafo grafo = new MatrizAdyacencia();
    String dir = ((System.getProperty("user.dir"))+"\\texto.txt");
    String dir2= dir.replace("\\", "/");
    ArrayList id= new ArrayList();
    
    /**
     * Este metodo crea un nuevo archivo de texto con la direccion
     * Guardad en dir2
     * No recibe parametros
     */
    public void getArchivo(){
        archivo= new File(dir2);
    }
    
    /**
     * Este metodo lee las ciudades del archivo de texto
     * y las agrega como vertices al grafo
     * @return El grafo con las ciudades agregada 
     * @throws IOException
     */
    public Grafo VerticesGrafo() throws IOException{
        fr = new FileReader(archivo);
        br = new BufferedReader(fr);
        String linea;
        while((linea=br.readLine())!=null){
            String[] tmp;
            tmp=linea.split(" ");
            grafo.addVertice(tmp[0]);
            grafo.addVertice(tmp[1]);
            id.add(tmp[0]);
        }
        return grafo;
    }
    
    /**
     * Este metodo agrega los las ciudades y la distancia entre ciudades a un archivo de texto
     * @param texto
     * @throws IOException
     */
    public void writeB(String texto) throws IOException{
        FileOutputStream fw1= new FileOutputStream(new File("texto1.txt"),true);
        OutputStreamWriter out= new OutputStreamWriter(fw1);
        BufferedWriter bw1= new BufferedWriter(out);
        bw1.newLine();
        bw1.append(texto+" ");
        bw1.close();
    }
    
    /**
     * Este metodo lee el archivo de texto y agrega la conexion entre dos ciudades con su peso o distancia correspondiente
     * @return El grafo con el peso correspondiente entre la ciudad de origen y la ciudad de destino
     * @throws IOException
     */
    public Grafo matrizPesos() throws IOException{
        // Lectura del fichero
        fr = new FileReader (archivo);
        br = new BufferedReader(fr);
        String linea;
        
        while((linea=br.readLine())!=null){
            String[] tmp;
            tmp=linea.split(" ");
            grafo.addEdge(tmp[0], tmp[1], tmp[2]);
            FileOutputStream fw1= new FileOutputStream(new File("texto1.txt"),true);
            OutputStreamWriter out= new OutputStreamWriter(fw1);
            BufferedWriter bw1= new BufferedWriter(out);
            bw1.newLine();
            bw1.append(tmp[0]+" "+ tmp[1]+" "+tmp[2]);
            bw1.close(); 
        }
        return grafo;
    }
    
}
